#pragma once

namespace EventTypes
{
enum eEventType
{
	UNKNOWN,
	KEYBOARD,
	MOUSE,
	QUIT
};
}

namespace MouseEvents
{
enum eMouseEventType
{
	LMB_UP,
	LMB_DOWN,
	RMB_UP,
	RMB_DOWN,
	MOVE
};
}

namespace KeyEvents
{
enum eKeyEventType
{
	UP,
	DOWN,
	TYPE
};
}

typedef EventTypes::eEventType			EventType;
typedef MouseEvents::eMouseEventType	MouseEventType;
typedef KeyEvents::eKeyEventType		KeyEventType;

struct MouseEvent
{
	s16				x, y;
	MouseEventType	event;
};

struct KeyboardEvent
{
	u32				key;
	KeyEventType	event;
	wchar_t			unicode;
};

struct Event
{
	Event()
	{
		type = EventTypes::UNKNOWN;
		mouse.x = mouse.y = 0;
	}

	KeyboardEvent	keyboard;
	MouseEvent		mouse;
	EventType		type;
};